<?php
class readpic extends data {
	private $keywords;
	public function __construct() {
		parent::__construct();
	}
	





	public function replace ($page_url, $page_html) {
		if ($page_url and $page_html) {
			preg_match_all('/<img\s+.+?>/is', $page_html, $imgs);	// 解析出img标签，结果如下： Array ([0] => Array ([0] => <img SRC="http://static12.photo.sina.com.cn/middle/65674041g99f70a64661b&amp;690" WIDTH="459" HEIGHT="690" NAME="image_operate_69541295186233433" /> ...))
			if (is_array($imgs[0])) {
				foreach ($imgs[0] as $original_img) {				// 单条<img .... />
					preg_match('/src\s*=\s*[\\\'|\"](.+?)[\\\'|\"]/is', $original_img, $src);
					if ($src[0]) {
						$original_src = $src[1];					// 单条img 记录中的src
						$absolute_src = $src[1];					// 将要把原src 替换成此src

						// 以下部分为了sina blog的real_src  ###################################################################
						preg_match('/real_src\s*=\s*[\\\'|\"](.+?)[\\\'|\"]/is', $original_img, $real_src);
						if ($real_src[1]) $absolute_src = $real_src[1];			// 用real_src中的内容做为真正的src
						// 结束 ##############################################################################################

						// 把相对地址变成绝对地址
						$absolute_src = $this->relative_to_absolute($absolute_src, $page_url);
						if ($this->is_absolute_src_need_to_relink($absolute_src)) {
							$absolute_src = $this->make_pic_reader_url($absolute_src);					// 把绝对地址变成http://uread.me/readpic.php?src=.....的格式
						}
						
						$absolute_img = str_replace($original_src, $absolute_src, $original_img);		// 把原img中的src替换成新的src
						
						$page_html = str_replace($original_img, $absolute_img, $page_html);				// 在html中替换该img标签
					}
				}
				return $page_html;
			} else return $page_html;
		} else return false;
	}
	
	/**
	 * 检查absolute src中是否有关键字
	 *
	 * @param String $absolute_src
	 * @return bool
	 */
	private function is_absolute_src_need_to_relink ($absolute_src) {
		if ($absolute_src) {
			
			// 当链接中已经是替换过的url时，就不用再替换了
			if (preg_match('/(uread.me|127.0.0.1|ureadme.)/is', $absolute_src)) {
				return false;
			} else {
				$keywords = $this->get_keywords();
				if ($keywords and is_array($keywords)) {
					foreach ($keywords as $keyword) {
						if ($keyword and preg_match($keyword, $absolute_src)) {
							return true;
							break;
						}
					}
					return false;
				} else return false;
			}
		} else return false;
	}
	/**
	 * 获取img relink中定义的所有keyword，
	 * 当第一次调用的时候，读取数据库，并将结果保存在$this->keywords中，以后再次读取时，就直接返回$this->keywords即可，不用再次读数据库了。
	 *
	 * @return Array ('keyword_1', 'keyword_2', ...)
	 */
	private function get_keywords () {
		if (empty($this->keywords)) {
			$execute = $this->db->execute('select
												*
											from
												img_relink_keywords
										');
			if ($execute and is_array($execute)) {
				foreach ($execute as $item) {
					$return[] = $item['keyword'];
				}
				$this->keywords = $return;
			} else {
				$this->keywords = false;
			}
		}
		return $this->keywords;
	}
	private function make_pic_reader_url ($absolute_src) {
		return 'http://'.$_SERVER['HTTP_HOST'].'/readpic.php?src='.$absolute_src;
	}
	
	
	
	
	
	
	/**
	 * 匹配html中的<img ...> 标签
	 *
	 * @param String $page_url			// 页面的url
	 * @param String $page_html			// 页面的html代码
	 * @return Array = array ( array (original_src => xxx, absolute_src => xxx), ....)
	 */
	// 这个好像没用了，不记得在下载图片的时候是不是要用到
	// 改名为xxx，如果没用就可以删除了
	private function xxx_parse_html_to_img ($page_url, $page_html) {
		if ($page_url and $page_html) {
			preg_match_all('/<img\s+.+?>/is', $page_html, $imgs);		// 解析出img标签，结果如下： 
			/*Array (
				    [0] => Array (
				            [0] => <img SRC="http://static12.photo.sina.com.cn/middle/65674041g99f70a64661b&amp;690" WIDTH="459" HEIGHT="690" NAME="image_operate_69541295186233433" /> 
				            ...
				        )
				)
			*/ 
			
			if (is_array($imgs[0])) {
				foreach ($imgs[0] as $img) {
					// 解析出img标签中的src
					preg_match('/src\s*=\s*(\\\'|\")(.+?)(\\\'|\")/is', $img, $src);
					$old_src = $src[2];
					
					if ($old_src) {
						$absolute_src = $this->rebuilt_src($page_url, $old_src);
						$return[] = array(
							'original_src' => $old_src,
							'absolute_src' => $absolute_src,
						);
					}
				}
				if (is_array($return) and count($return)>0) {		// 有结果才返回
					return $return;
				} else return false;
			} else return false;
		} else return false;
	}
}
?>